آموزش ساخت بازی سه بعدی به زبان Basic با دارک بیسیک Dark Basic تهیه و آموزش نرم افزار دارک بیسیک |
|||
پنج شنبه 22 فروردين 1392برچسب:, :: 1:46 :: نويسنده : ابوالفضل
در این فصل به چگونگی کنترل بازی توسط کاربر می پردازیم . دستورات و توابعی را یاد می گیریم تا وردی ها را کنترل کنیم . مثلا در عوض فشرده شدن کلید های موس و کیبورد یا حرکت موس ، کار خاصی را انجام دهیم .
دستور HIDE MOUSE این دستور باعث مخفی شدن شکل موس ( فلش متحرک ) بر روی صفحه ی نمایشگر می شود . مانند مثال زیر :
HIDE MOUSE Wait Key
با اجرای این مثال زمانی که برنامه در حالت اجراست ، شکل موس دیده نخواهد شد .
دستور SHOW MOUSE اگر از دستور گذشته ( HIDE MOUSE ) در برنامه استفاده کرده باشیم . می توانیم با این دستور شکل موس ( فلش متحرک ) را دوباره در صفحه نمایشگر ظاهر کنیم . مانند مثال زیر :
HIDE MOUSE "PRINT "Hide Mouse WAIT 5000 "CLS : PRINT "Show Mouse SHOW MOUSE WAIT KEY
در این مثال در خط اول شکل موس مخفی و پس از 5 ثانیه در خط پنجم شکل موس دوباره آشکار خواهد شد .
دستور POSITION MOUSE با استفاده از این دستور ، می توانیم موقعیت مکانی موس را بر روی صفحه ی نمایشگر مشخص کنیم . مانند دستورالعمل زیر :
POSITION MOUSE X,Y
طبق این دستورالعمل به جای X موقعیت طولی ( فاصله ی موس تا چپ صفحه ) و به جای Y موقعیت عرضی ( فاصله ی موس تا بالای صفحه ) را قرار می دهیم . تعیین موقعت موس با این دستور بستگی به مختصات طولی و عرضی دارد . یعنی اگر برای مثال ، مختصات طولی و عرضی نمایشگر ( رزولوشن ) را روی 480*640 تنظیم کرده باشیم ( قبلا در فصل سوم زمان معرفی دستور Set Cursor توضیح داده شد ) ، کمترین مقدار X صفر و بیشترین مقدار آن 639 و همچنین کمترین مقدار Y صفر و بیشترین مقدار آن 479 خواهد بود . مانند مثال زیر :
Do Position Mouse 100,100 WAIT 500 Position Mouse 400,400 WAIT 500 Loop
در این مثال ، هر 500 میلی ثانیه ، موقعیت موس با دستور Position Mouse تغییر خواهد کرد .
دستور CHANGE MOUSE با این دستور می توانیم شکل موس را تغییر دهیم . مانند دستور العمل زیر :
CHANGE MOUSE CursorNumber
طبق این دستورالعمل ، اگر به جای CursorNumber عدد صفر را قرار دهیم ، شکل موس به شکل ساعت شنی در می آید و اگر به جای CursorNumber عدد یک را قرار دهیم ، شکل موس به حالت عادی اش ( به شکل فلش ) برمی گردد . مانند مثال زیر :
"... Print "Please Wait CHANGE MOUSE 1 Wait 2500 "Cls : Print "Thank You CHANGE MOUSE 0 Do : Loop
با اجرای این مثال در خط دوم ، موس بشکل ساعت شنی در می آید و در خط پنجم ، موس بشکل عادی اش برمی گردد . زمانی که محاسبات سنگینی را انجام می دهیم ، از این روش برای نشان دادن حالت انجام محسابات استفاده می کنیم .
دستور WRITE TO CLIPBOARD با استفاده از این دستور ، می توانیم یک عبارت کاراکتری را به حافظه ی موقت ویندوز (Clipboard ) انتقال دهیم . مانند مثال زیر :
"WRITE TO CLIPBOARD "This Is A Example Wait Key
در این مثال ، برای نمونه عبارت This Is A Example را به حافظه ی موقت ویندوز (Clipboard ) انتقال دادیم . می توانیم در برنامه های دیگر از آن استفاده کنیم ( بچسبانیم . یعنی به جای دیگری Paste کنیم ) . تا زمانی که حافظه ی Clipboard توسط این برنامه یا برنامه های دیگر دوباره تغیر نکرده باشد ، عبارت This Is A Example در حافظه ی Clipboard باقی خواهد ماند .
تابع $GET CLIPBOARD اگر قبلا در حافظه موقت ویندوز ( Clipboard ) عبارتی ذخیره شده باشد ( از دستورWRITE TO CLIPBOARD و یا توسط دیگر برنامه ها ) ، با این تابع می توانیم مقدار آن را بخوانیم . مانند مثال زیر :
"A$ = "Hello $WRITE TO CLIPBOARD A ()$retStr$ = GET CLIPBOARD $Print retStr Suspend For Key
با اجرای این مثال ، عبارت Hello در حافظه ی موقت ویندوز ( Clipboard ) ذخیره شد و در خط سوم ، به متغیر $retStr انتقال پیدا کرد و در خط چهارم چاپ شد .
تابع MOUSECLICK با این تابع می توانیم کیک شدن دکمه ی سمت چپ موس را بررسی کنیم . یعنی اگر مقدار این تابع برابر یک بود یعنی کلید سمت چپ موس فشرده شده و اگر مقدار این تابع برابر صفر بود ، یعنی کلید سمت چپ موس فشرده نشده ، مانند مثال زیر :
Do Cls "If MouseClick() Then Text 10,10,"Click "If MouseClick() = 0 Then Text 20,20,"No Click Loop
با اجرای این مثال اگر دکمه ی سمت چپ موس فشرده شود ، عبارت Click چاپ می شود . و اگر دکمه ی سمت چپ موس فشرده نشده باشد ، عبارت No Click چاپ خواهد شد .
تابع MOUSEX و تابع MOUSEY این دو تابع موقعیت طولی و عرضی موس را برمی گردانند . یعنی اگر موس در هر موقعیتی در صفحه ی نمایشگر باشد . مقدار تابع ()MouseX موقعیت طولی و مقدار تابع ()MouseY موقعیت عرضی موس را برمی گردانند ( حساب خواهند کرد ) . مانند مثال زیر :
Do Cls Set Cursor 10,10 ()Print "Position X = " ; MouseX Set Cursor 10,20 ()Print "Position Y = " ; MouseY Loop
با اجرای این مثال موقعیت طولی و عرضی موس بر روی صفحه ی نمایشگر چاپ خواهد شد . یعنی اگر موس در هر جایی از صفحه باشد ، مقدار فاصله ی آن تا سمت چپ صفحه بعنوان طول ( X ) و مقدار فاصله ی آن از بالای صفحه بعنوان عرض ( Y ) چاپ خواهد شد .
تابع MOUSEZ هر زمان که چرخ مابین دو کلید چپ و راست موس را به بالا و پایین حرکت می دهیم ، مقدار این تابع کم و زیاد خواهد شد ( هر بار مقدار 120 واحد ) . می توانیم در بازی برای زوم کردن از آن استفاده کنیم . مانند مثال زیر :
Do Cls Set Cursor 10,10 ()Select MouseZ Case 0 "Print "No Zoom EndCase Case 120 "Print "1X Zoom EndCase Case 240 "Print "2X Zoom EndCase Case 360 "Print "3X Zoom EndCase Case Default "Print "4X Zoom EndCase EndSelect ()Print "Position Y = " ; MouseZ Loop
تابع MOUSEMOVEX و تابع MOUSEMOVEY تابع ()MouseMoveX مقدار حرکت موس را ، در جهت مختصات طولی ( محور X نمایشگر ) ، و تابع ()MouseMoveX مقدار حرکت موس را ، در جهت مختصات عرضی ( محور Y نمایشگر ) در هر لحظه از زمان محاسبه کرده و مقدار آن را برمی گرداند . مانند مثال زیر :
do Cls ()X# = MouseMoveX (#Text 10,10,"MouseMoveX = " + Str$(X (()Text 10,30,"MouseMoveY = " + Str$(MouseMoveY wait 100 Loop
این مثال را تایپ و اجرا کنید . هم اکنون با حرکت دادن موس ، مقدار حرکت موس در هر لحظه بر روی صفحه ی مانیتور نمایش داده خواهد شد . ما در این مثال از دستور wait استفاده کردیم تا برنامه کمی کند اجرا شود ، تا شما اعداد این دو تابع را به خوبی ببینید .
تابع MOUSEMOVEZ هر زمان که چرخ مابین دو کلید چپ و راست موس را به بالا و پایین حرکت می دهیم ، مقدار حرکت این چرخ در هر لحظه توسط این تابع محاسبه و بصورت یک عدد برگردانده می شود . ( هر بار مقدار 120 واحد ) . مانند مثال زیر :
Do Cls ()Print "MouseMoveZ = " ; MouseMoveZ Wait 100 Loop
تابع UPKEY در صفحه ی کیبورد کامپیوتر ، چهار کلید ، جهات ( بالا و پایین و چپ و راست ) را نشان می دهند ، که به Arrow Keys معروف هستند . زمانی که دکمه جهت بالا فشرده شده باشد ، تابع ()UpKey مقدار یک و زمانی که این دکمه رها شده باشد ، تابع ()UpKey مقدار صفر را در خود نگه خواهد داشت . همانند مثال زیر :
do Cls "if upkey() = 1 Then print "Up Key Has Been Pressed "if upkey() = 0 Then print "Up Key Has Not Be Pressed loop
با اجرای این مثال اگر دکمه ی جهت بالا فشرده شده باشد ، عبارت Up Key Has Been Pressed چاپ خواهد شد و اگر رها شده باشد ، عبارت Up Key Has Not Be Pressed چاپ خواهد شد . پس ما با استفاده از این گونه توابع می توانیم فشرده و یا رها شدن دکمه ها را کنترل کنیم .
تابع DOWNKEY زمانی که دکمه جهت پائین فشرده شده باشد ، تابع ()DownKey مقدار یک و زمانی که همین دکمه رها شده باشد ، تابع ()DownKey مقدار صفر را برمی گرداند . مانند مثال زیر :
do Cls "if Downkey() = 1 Then print "Down Key Has Been Pressed "if Downkey() = 0 Then print "Down Key Has Not Be Pressed loop
تابع LEFTKEY زمانی که دکمه جهت چپ فشرده شده باشد ، تابع ()LeftKey مقدار یک و زمانی که این دکمه رها شده باشد ، تابع ()LeftKey مقدار صفر را برمی گرداند . مانند مثال زیر :
do Cls "if Leftkey() = 1 Then print "Left Key Has Been Pressed "if Leftkey() = 0 Then print "Left Key Has Not Be Pressed loop
تابع RIGHTKEY زمانی که دکمه جهت راست فشرده شده باشد ، تابع ()RightKey مقدار یک و زمانی که این دکمه رها شده باشد ، تابع ()RightKey مقدار صفر را برمی گرداند . مانند مثال زیر :
do Cls "if Rightkey() = 1 Then print "Right Key Has Been Pressed "if Rightkey() = 0 Then print "Right Key Has Not Be Pressed loop
تابع CONTROLKEY زمانی که دکمه ی کنترل ( دو دکمه ای که عبارت Ctrl بر روی آنهاست ) فشرده شده باشد ( یکی یا هر دو ) ، تابع ()ControlKey مقدار یک را برمی گرداند و زمانی که این دکمه ( یکی یا هر دو ) رها شده باشد ، تابع ()ControlKey مقدار صفر را برمی گرداند . مانند مثال زیر :
do Cls "if ControlKey() = 1 Then print "Ctrl Key Has Been Pressed "if Controlkey() = 0 Then print "Ctrl Key Has Not Be Pressed loop
تابع SHIFTKEY زمانی که دکمه ی شیفت ( دو دکمه ای که عبارت Shift بر روی آنهاست ) فشرده شده باشد ( یکی یا هر دو ) ، تابع ()ShiftKey مقدار یک را برمی گرداند و زمانی که این دکمه ( یکی یا هر دو ) رها شده باشد ، تابع ()ShiftKey مقدار صفر را برمی گرداند . مانند مثال زیر :
do Cls if ShiftKey() = 1 "print "Shift Key Has Been Pressed Else "print "Shift Key Has Not Be Pressed EndIf loop
تابع RETURNKEY زمانی که دکمه Enter فشرده شده باشد ، تابع ()ReturnKey مقدار یک و زمانی که این دکمه رها شده باشد ، تابع ()ReturnKey مقدار صفر را برمی گرداند مانند مثال زیر :
do Cls "if Returnkey() = 1 Then print "Return Key Has Been Pressed "if Returnkey() = 0 Then print "Return Key Has Not Be Pressed loop
تابع SPACEKEY زمانی که دکمه Space ( بزرگ ترین دکمه در کیبورد ) فشرده شده باشد ، تابع ()SpaceKey مقدار یک و زمانی که این دکمه رها شده باشد ، تابع ()SpaceKey مقدار صفر را برمی گرداند . مانند مثال زیر :
do Cls "if Spacekey() = 1 Then print "Space Key Has Been Pressed "if Spacekey() = 0 Then print "Space Key Has Not Be Pressed loop
تابع ESCAPEKEY زمانی که دکمه Esc فشرده شده باشد ، تابع ()EscapeKey مقدار یک و زمانی که این دکمه رها شده باشد ، تابع ()EscapeKey مقدار صفر را برمی گرداند . مانند مثال زیر :
do Cls "if Escapekey() = 1 Then print "Escape Key Has Been Pressed "if Escapekey() = 0 Then print "Escape Key Has Not Be Pressed loop
نکته بسیار مهم : زمانی که دکمه ی Esc را فشار می دهیم . از برنامه هم خارج می شویم . دلیل آن چیست ؟ دلیل آن این است که این خاصیت جزء رفتار های DarkBasic می باشد ، یعنی در هر زمان با زدن Esc از بازی خارج می شویم . حتی اگر نخواهیم . پس برای اینکه این خاصیت خروج سریع با زدن Esc را غیر فعال کنیم ، از کد زیر استفاده می کنیم . مانند مثال زیر :
Disable EscapeKey do Cls "if Escapekey() = 1 Then print "Escape Key Has Been Pressed "if Escapekey() = 0 Then print "Escape Key Has Not Be Pressed loop
این مثال را اجرا می کنیم و دکمه ی Esc را چند بار می زنیم . حالا چگونه باید از برنامه خارج شویم ؟ می توانیم با فشردن سه کلید Ctrl و Alt و Delete بطور هم زمان برنامه را از مدار خارج کنیم . همچنین می توانیم مانند مثال زیر خروج از برنامه را تحت کنترل خود در بیاوریم .
Disable EscapeKey do Cls if Inkey$() = "Q" Or Inkey$() = "q" Then End "Print "Q Key To Exit Program loop
در این مثال اگر دکمه ی [Q] را فشار دهیم ، از برنامه خارج خواهیم شد .
تابع INKEY در مثال بالا از تابع ()$Inkey استفاده کردیم . یعنی اگر در هر زمان ، هر کدام از دکمه های حروف فشرده شود ، تابع ()$Inkey همان حرف را بصورت یک عبارت تک کاراکتری برمی گرداند . مانند مثال زیر :
do Cls ()$Text 20,20,Inkey loop
این مثال را اجرا کنید و چند دکمه ( دکمه های حروف ) را بزنید ( دکمه های A تا Z ) . با زدن هر دکمه حرف مربوط به آن دکمه چاپ خواهد شد . البته اگر دکمه ی Shift را نگه دارید و یا دکمه ی Caps Lock را قبلا روشن کرده باشید ، حالت کوچک و یا بزرگ بودن حروف تغییر خواهد کرد .
تابع SCANCODE هر یک از دکمه های کیبورد ( تمامی دکمه ها بدون استثنا ) یک شماره ی کد مخصوص به خود را دارد . در صورت فشرده شدن هر کدام از دکمه ها ، تابع ()ScanCode در هر زمان شماره ی مخصوص همان دکمه را بصورت یک عدد برمی گرداند . مانند مثال زیر :
cls do if scancode() > 0 ()print scancode endif loop
با اجرای این مثال می توانیم شناسایی کنیم که هر کدام از دکمه ها چه کدی دارد . مثلا با اجرای این مثال دکمه ی F1 را فشار می دهیم و برنامه عدد 59 را نشان می دهد . پس با این مثال فهمیدیم که کد دکمه ی F1 برابر 59 می باشد . پس اگر خواستیم از دکمه ی F1 بعنوان راهنما ( Help ) در بازی استفاده کنیم ، از این کد استفاده می کنیم . مانند مثال زیر :
Do Cls "Print "Press F1 To Help "If ScanCode() = 59 Then Print "Help View Loop نظرات شما عزیزان:
موضوعات آخرین مطالب آرشيو وبلاگ پیوندهای روزانه پيوندها
![]() نويسندگان |
|||
![]() |